package com.ljx.factoryMode;

/**
 * 工厂设计模式
 * 将具体产品和创建者解耦
 * 符合单一职责原则
 * 符合开闭原则
 * @作者 LJX
 * @日期 2022/12/20 9:58
 */
public class FactoryMethod {

    public static void main(String[] args) {
        Application aapp = new ProductAApp();
        aapp.getObject().method1();

        Application bapp = new ProductBApp();
        bapp.getObject().method1();
    }

}


/**
 * 抽象商品接口
 */
interface Product{
    public void method1();
}

/**
 * 具体商品A
 */
class ProductA implements Product{
    public void method1(){
        System.out.println("商品A。。。。。。");
    }
}

/**
 * 具体商品B
 */
class ProductB implements Product{
    public void method1(){
        System.out.println("商品B。。。。。。");
    }
}

/**
 * 工厂
 */
abstract class Application{
    abstract Product createProduct();

    Product getObject(){
        Product product = createProduct();
        return product;
    }
}

/**
 * 商品A工厂
 */
class ProductAApp extends Application{
    @Override
    Product createProduct() {
        return new ProductA();
    }
}

/**
 * 商品B工厂
 */
class ProductBApp extends Application{
    @Override
    Product createProduct() {
        return new ProductB();
    }
}


